iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
1
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 15

[鐵人賽第15天] 使用 while 迴圈

  • 分享至 

  • xImage
  •  

除了 for 迴圈外, ShellScript 也允許使用不定迴圈,這是不定迴圈的語法:

while [ some program ];
do
    echo while loop
done

其中 [ some program ] 除了可以用 [ 這個指令外,也可以是任何其他的指令,反正只要有 exit code 都可以讓 while 去判斷是否要繼續執行。

不定迴圈最常用的莫過於無窮迴圈,在 ShellScript 裡面做無窮迴圈也非常簡單:

while [ TRUE ]; do
    npm start
done

這樣執行程式有什麼好處呢?有時候我們改東西不用重開 Server --像是改 EJS 的 view、但是有時候調整設定像是 routing 要重開 Server ,要切換過去多少有點麻煩,用上面的 Watchdog 執行,只要透過 killall -9 node 就可以重開 Server 啦。

除了一般的 Watchdog 外,有時候我們也不知道 API Server 什麼時候會修好。這時候就可以用反向條件來跑 while 迴圈,反向條件只要在指令前面加上一個 ! 就可以變成反向條件了。假如果們要用 curl 測試 API ,就可以用下面的指令:

while ! curl http://192.168.5.3/api/getList > /dev/null 2> /dev/null ; do
    echo API fail
done
mplayer success.m4a

這樣就可以安心先弄別的東西,等到聽到音樂再回來間接他們的 API 啦。

當然有迴圈當然也可以 break ,像是這樣:

count=0
while ! curl http://192.168.5.3/api/getList > /dev/null 2> /dev/null ; do
    echo API fail
    count=$(( $count + 1 ))
    if [ "$count" == 10 ]; then
        break;
    fi
done
if [ "$count" == 10 ]; then
  mplayer success.m4a
else 
  mplayer giveup.m4a
fi

以上就是我在 Shell 裡面常常用到的不定迴圈。


我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第14天] if 、 && 、 || 與 [] ;
下一篇
[鐵人賽第16天] 正規表達的使用
系列文
30 天的 ShellScript 教室解決開發者的困擾23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
卡斯
iT邦研究生 1 級 ‧ 2016-12-29 19:56:58

保重阿/images/emoticon/emoticon06.gif

我要留言

立即登入留言